﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.IO;
using NPOI.HSSF.UserModel;
using NPOI.HPSF;
namespace syc.Store
{
    public partial class 新废料入库管理 : System.Web.UI.Page
    {
        protected double 废车削;
        protected double 废打包带;
        protected double 废切头;

        protected double 废车削基数;
        protected double 废打包带基数;
        protected double 废切头基数;

        protected int 一分厂套管入库支数;
        protected double 一分厂套管理论重量;

        protected int 二分厂套管入库支数;
        protected double 二分厂套管理论重量;

        protected int 二分厂油管入库支数;
        protected double 二分厂油管理论重量;

        protected int 五分厂油管入库支数;
        protected double 五分厂油管理论重量;

        protected int 三分厂套管接箍数;
        protected double 三分厂套管接箍理论重量;

        protected int 三分厂油管接箍数;
        protected double 三分厂油管接箍理论重量;


        protected double 废车削计划单价;
        protected double 废打包带计划单价;
        protected double 废切头计划单价;

        protected double 废车削实际单价;
        protected double 废打包带实际单价;
        protected double 废切头实际单价;

        protected double 一分厂废打包带实际重量;
        protected double 二分厂废打包带实际重量;
        protected double 五分厂废打包带实际重量;
        protected double 四分厂废打包带实际重量;

        protected double 一分厂比例系数 = 0;
        protected double 二分厂比例系数 = 0;
        protected double 三分厂比例系数 = 0;
        protected double 五分厂比例系数 = 0;

        protected double 一分厂车削实际重量 = 0;
        protected double 二分厂车削实际重量 = 0;
        protected double 三分厂车削实际重量 = 0;
        protected double 五分厂车削实际重量 = 0;

        protected double 一分厂车削账面实际重量 = 0;
        protected double 二分厂车削账面实际重量 = 0;
        protected double 三分厂车削账面实际重量 = 0;
        protected double 五分厂车削账面实际重量 = 0;

        protected double 一分厂车削实际金额 = 0;
        protected double 二分厂车削实际金额 = 0;
        protected double 三分厂车削实际金额 = 0;
        protected double 五分厂车削实际金额 = 0;

        protected double 一分厂车削计划金额 = 0;
        protected double 二分厂车削计划金额 = 0;
        protected double 三分厂车削计划金额 = 0;
        protected double 五分厂车削计划金额 = 0;

        protected double 一分厂车削账面金额 = 0;
        protected double 二分厂车削账面金额 = 0;
        protected double 三分厂车削账面金额 = 0;
        protected double 五分厂车削账面金额 = 0;

        protected double 一分厂打包带实际重量 = 0;
        protected double 二分厂打包带实际重量 = 0;
        //protected double 四分厂打包带实际重量 = 0;
        protected double 五分厂打包带实际重量 = 0;

        protected double 一分厂打包带账面实际重量 = 0;
        protected double 二分厂打包带账面实际重量 = 0;
        //protected double 四分厂打包带账面实际重量 = 0;
        protected double 五分厂打包带账面实际重量 = 0;

        protected double 一分厂打包带实际金额 = 0;
        protected double 二分厂打包带实际金额 = 0;
        //protected double 四分厂打包带实际金额 = 0;
        protected double 五分厂打包带实际金额 = 0;

        protected double 一分厂打包带计划金额 = 0;
        protected double 二分厂打包带计划金额 = 0;
        //protected   double 四分厂打包带计划金额 = 0;
        protected double 五分厂打包带计划金额 = 0;

        protected double 一分厂打包带账面金额 = 0;
        protected double 二分厂打包带账面金额 = 0;
        //protected   double 四分厂打包带账面金额 = 0;
        protected double 五分厂打包带账面金额 = 0;

        protected double 切头实际金额;
        protected double 切头计划金额;

        protected string 起始日期;
        protected string 截止日期;
 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                this.NianDu.SelectedValue = DateTime.Today.Year.ToString();
                this.YueFen.SelectedValue = DateTime.Today.Month.ToString();    
            }
            Button_Query_Click();
        }

        protected void Button_To_Click(object sender, EventArgs e)
        {
           
            Response.Redirect("/Store/废品分配表.aspx");
        
        }
        protected void Button_Query_Click()
        {
            SqlConnection Conn = new SqlConnection();
            Conn.ConnectionString = ConfigurationManager.ConnectionStrings["SCMConnectionString1"].ConnectionString;
            Conn.Open();
            SqlCommand Cmd = new SqlCommand();
            Cmd.Connection = Conn;
            string sql = @"
            declare @废车削 float
            declare @废打包带 float
            declare @废切头 float          
      
            declare @d1 datetime
            declare @d2 datetime
            select @d1=起始日期,@d2=截止日期 from 生产月设置 where 分厂=0 and 年度=@年度 and 月份=@月份
            select @废车削=isnull(sum(数量),0) from 废料到发记录 where 废料ID=1 and 发货=1 and 日期 between @d1 and @d2
            select @废打包带=isnull(sum(数量),0) from 废料到发记录 where 废料ID=2 and 发货=1 and 日期 between @d1 and @d2
            select @废切头=isnull(sum(数量),0) from 废料到发记录 where 废料ID=3 and 发货=1 and 日期 between @d1 and @d2
            select @废车削,@废打包带,@废切头,@d1,@d2          
           ";
            sql = sql.Replace("@年度", this.NianDu.Text);
            sql = sql.Replace("@月份", this.YueFen.Text);
            Cmd.CommandText = sql;
            SqlDataReader Reader = Cmd.ExecuteReader();
            if (Reader.Read())
            {
                废车削 = Reader.GetDouble(0);
                废打包带 = Reader.GetDouble(1);
                废切头 = Reader.GetDouble(2);
                if (Reader.IsDBNull(3))
                {
                    起始日期 = "";
                }
                else
                {
                    起始日期 = Reader.GetDateTime(3).ToString("yyyy年MM月dd日");
                }
                if (Reader.IsDBNull(4))
                {
                    截止日期 = "";
                }
                else
                {
                    截止日期 = Reader.GetDateTime(4).ToString("yyyy年MM月dd日");
                }

            }
            Reader.Close();
            //
            string sql1 = @"
            declare  @一分厂套管入库支数 int
            declare  @一分厂套管N80入库支数 int

            declare  @二分厂套管入库支数 int

            declare @二分厂油管入库支数 int
            declare @五分厂油管入库支数 int

            declare  @三分厂油管接箍数 int
            declare  @三分厂套管接箍数 int      
      
            declare @d1 datetime
            declare @d2 datetime
            declare @d31 datetime
            declare @d32 datetime
            select @d1=起始日期,@d2=截止日期 from 生产月设置 where 分厂=0 and 年度=@年度 and 月份=@月份
            select @d31=起始日期,@d32=截止日期 from 生产月设置 where 分厂=3 and 年度=@年度 and 月份=@月份
            select @一分厂套管入库支数=isnull(sum(支数),0) from 产品库存 where 产品类别ID=2 and 生产线 between 100 and 199 and 入库日期 between @d1 and @d2
            select @二分厂油管入库支数=isnull(sum(支数),0) from 产品库存 where 产品类别ID=1 and 生产线 between 200 and  299 and 入库日期 between @d1 and  @d2
            select @二分厂套管入库支数=isnull(sum(支数),0) from 产品库存 where 产品类别ID=2 and 生产线 between 200 and  299 and 入库日期 between @d1 and  @d2
            select @五分厂油管入库支数=isnull(sum(支数),0) from 产品库存 where 产品类别ID=1 and 生产线 between 500 and 599 and 入库日期 between @d1 and  @d2
            select @一分厂套管N80入库支数=isnull(sum(支数),0) from 产品库存 where 产品类别ID=4 and 生产线 between 100 and 199 and 入库日期 between @d1 and @d2
            select @三分厂油管接箍数=isnull(SUM(车丝8+车丝9+车丝10+车丝11+车丝12+车丝13+车丝14+车丝15),0) from 生产进度3 where 日期 between @d31 and @d32 and 产品类别ID=1
            select @三分厂套管接箍数=isnull(SUM(车丝1+车丝2+车丝3+车丝4+车丝5+车丝6+车丝7),0) from 生产进度3 where 日期 between @d31 and @d32 and 产品类别ID=2
            select @一分厂套管入库支数,@二分厂套管入库支数,@二分厂油管入库支数,@五分厂油管入库支数,@一分厂套管N80入库支数,@三分厂套管接箍数,@三分厂油管接箍数       
           ";
            sql1 = sql1.Replace("@年度", this.NianDu.Text);
            sql1 = sql1.Replace("@月份", this.YueFen.Text);
            Cmd.CommandText = sql1;
            Reader = Cmd.ExecuteReader();
            if (Reader.Read())
            {
                一分厂套管入库支数 = Reader.GetInt32(0) + Reader.GetInt32(4);
                二分厂套管入库支数 = Reader.GetInt32(1);
                二分厂油管入库支数 = Reader.GetInt32(2);
                五分厂油管入库支数 = Reader.GetInt32(3);
                三分厂套管接箍数 = Reader.GetInt32(5);
                三分厂油管接箍数 = Reader.GetInt32(6);
            }
            Reader.Close();
            string sql2 = @"
            declare @废车削计划单价 float
            declare @废打包带计划单价 float
            declare @废切头计划单价 float    
            
            declare @废车削实际单价 float
            declare @废打包带实际单价 float
            declare @废切头实际单价 float          
      
       
            select @废车削计划单价=isnull(计划单价,0),@废车削实际单价=isnull(实际单价,0) from 废料季度招标单价 where 废料ID=1 and 年度=@年度 and 季度=@季度
            select @废打包带计划单价=isnull(计划单价,0),@废打包带实际单价=isnull(实际单价,0) from 废料季度招标单价 where 废料ID=2 and 年度=@年度 and 季度=@季度
            select @废切头计划单价=isnull(计划单价,0),@废切头实际单价=isnull(实际单价,0) from 废料季度招标单价 where 废料ID=3 and 年度=@年度 and 季度=@季度
            select @废车削计划单价,@废打包带计划单价,@废切头计划单价,@废车削实际单价,@废打包带实际单价,@废切头实际单价           
           ";
            sql2 = sql2.Replace("@年度", this.NianDu.Text.ToString());
            int 季度;

            if (this.YueFen.SelectedItem.Value == "1" || this.YueFen.SelectedItem.Value == "2" || this.YueFen.SelectedItem.Value == "3")
            {
                季度 = 1;
                sql2 = sql2.Replace("@季度", 季度.ToString());
            }
            if (this.YueFen.SelectedItem.Value == "4" || this.YueFen.SelectedItem.Value == "5" || this.YueFen.SelectedItem.Value == "6")
            {
                季度 = 2;
                sql2 = sql2.Replace("@季度", 季度.ToString());
            }
            if (this.YueFen.SelectedItem.Value == "7" || this.YueFen.SelectedItem.Value == "8" || this.YueFen.SelectedItem.Value == "9")
            {
                季度 = 3;
                sql2 = sql2.Replace("@季度", 季度.ToString());
            }
            if (this.YueFen.SelectedItem.Value == "10" || this.YueFen.SelectedItem.Value == "11" || this.YueFen.SelectedItem.Value == "12")
            {
                季度 = 4;
                sql2 = sql2.Replace("@季度", 季度.ToString());
            }
            Cmd.CommandText = sql2;
            Reader = Cmd.ExecuteReader();
            if (Reader.Read())
            {
                if (Reader.IsDBNull(0))
                {
                    废车削计划单价 = 0;
                }
                else
                {
                    废车削计划单价 = Reader.GetDouble(0);
                }
                if (Reader.IsDBNull(1))
                {
                    废打包带计划单价 = 0;
                }
                else
                {
                    废打包带计划单价 = Reader.GetDouble(1);
                }
                if (Reader.IsDBNull(2))
                {
                    废切头计划单价 = 0;
                }
                else
                {
                    废切头计划单价 = Reader.GetDouble(2);
                }

                if (Reader.IsDBNull(3))
                {
                    废车削实际单价 = 0;
                }
                else
                {
                    废车削实际单价 = Reader.GetDouble(3);
                }
                if (Reader.IsDBNull(4))
                {
                    废打包带实际单价 = 0;
                }
                else
                {
                    废打包带实际单价 = Reader.GetDouble(4);
                }
                if (Reader.IsDBNull(5))
                {
                    废切头实际单价 = 0;
                }
                else
                {
                    废切头实际单价 = Reader.GetDouble(5);
                }
            }
            Reader.Close();
            一分厂套管理论重量 = 一分厂套管入库支数 * 1.6;
            二分厂套管理论重量 = 二分厂套管入库支数 * 1.6;
            二分厂油管理论重量 = 二分厂油管入库支数 * 0.7;
            三分厂套管接箍理论重量 = 三分厂套管接箍数 * 4;
            三分厂油管接箍理论重量 = 三分厂油管接箍数 * 1.2;
            五分厂油管理论重量 = 五分厂油管入库支数 * 0.7;
            if (五分厂油管理论重量 == 0)
            {
                一分厂比例系数 = 0;
                二分厂比例系数 = 0;
                三分厂比例系数 = 0;
                五分厂比例系数 = 0;
            }
            else
            {
                一分厂比例系数 = double.Parse((一分厂套管理论重量 / 五分厂油管理论重量).ToString("0.000"));
                二分厂比例系数 = double.Parse(((二分厂套管理论重量 + 二分厂油管理论重量) / 五分厂油管理论重量).ToString("0.000"));
                三分厂比例系数 = double.Parse(((三分厂套管接箍理论重量 + 三分厂油管接箍理论重量) / 五分厂油管理论重量).ToString("0.000"));
                五分厂比例系数 = 1;
            }
            if ((一分厂比例系数 + 二分厂比例系数 + 三分厂比例系数 + 五分厂比例系数) == 0)
            {
                废车削基数 = 0;
            }
            else
            {
                废车削基数 = double.Parse((废车削 / (一分厂比例系数 + 二分厂比例系数 + 三分厂比例系数 + 五分厂比例系数)).ToString("0.000"));
            }
            一分厂车削实际重量 = double.Parse((废车削基数 * 一分厂比例系数).ToString("0.000"));
            二分厂车削实际重量 = double.Parse((废车削基数 * 二分厂比例系数).ToString("0.000"));
            三分厂车削实际重量 = double.Parse((废车削基数 * 三分厂比例系数).ToString("0.000"));
            五分厂车削实际重量 = double.Parse((废车削基数 * 五分厂比例系数).ToString("0.000"));

            一分厂车削账面实际重量 = double.Parse((废车削基数 * 一分厂比例系数).ToString("0.000"));
            二分厂车削账面实际重量 = double.Parse((废车削基数 * 二分厂比例系数).ToString("0.000"));
            三分厂车削账面实际重量 = double.Parse((废车削基数 * 三分厂比例系数).ToString("0.000"));
            五分厂车削账面实际重量 = double.Parse((废车削基数 * 五分厂比例系数).ToString("0.000"));
            if ((一分厂车削账面实际重量 + 二分厂车削账面实际重量 + 三分厂车削账面实际重量 + 五分厂车削账面实际重量) != 0)
            {
                if ((一分厂车削账面实际重量 + 二分厂车削账面实际重量 + 三分厂车削账面实际重量 + 五分厂车削账面实际重量) - 废车削 > 0)
                {
                    一分厂车削账面实际重量 = 一分厂车削账面实际重量 - ((一分厂车削账面实际重量 + 二分厂车削账面实际重量 + 三分厂车削账面实际重量 + 五分厂车削账面实际重量) - 废车削);
                }
                if ((一分厂车削账面实际重量 + 二分厂车削账面实际重量 + 三分厂车削账面实际重量 + 五分厂车削账面实际重量) - 废车削 < 0)
                {
                    一分厂车削账面实际重量 = 一分厂车削账面实际重量 - ((一分厂车削账面实际重量 + 二分厂车削账面实际重量 + 三分厂车削账面实际重量 + 五分厂车削账面实际重量) - 废车削);
                }
            }

            一分厂车削实际金额 = double.Parse((废车削实际单价 * 一分厂车削实际重量).ToString("0.00"));
            二分厂车削实际金额 = double.Parse((废车削实际单价 * 二分厂车削实际重量).ToString("0.00"));
            三分厂车削实际金额 = double.Parse((废车削实际单价 * 三分厂车削实际重量).ToString("0.00"));
            五分厂车削实际金额 = double.Parse((废车削实际单价 * 五分厂车削实际重量).ToString("0.00"));

            一分厂车削计划金额 = double.Parse((废车削计划单价 * 一分厂车削实际重量).ToString("0.00"));
            二分厂车削计划金额 = double.Parse((废车削计划单价 * 二分厂车削实际重量).ToString("0.00"));
            三分厂车削计划金额 = double.Parse((废车削计划单价 * 三分厂车削实际重量).ToString("0.00"));
            五分厂车削计划金额 = double.Parse((废车削计划单价 * 五分厂车削实际重量).ToString("0.00"));

            一分厂车削账面金额 = double.Parse((废车削计划单价 * 一分厂车削账面实际重量).ToString("0.00"));
            二分厂车削账面金额 = double.Parse((废车削计划单价 * 二分厂车削账面实际重量).ToString("0.00"));
            三分厂车削账面金额 = double.Parse((废车削计划单价 * 三分厂车削账面实际重量).ToString("0.00"));
            五分厂车削账面金额 = double.Parse((废车削计划单价 * 五分厂车削账面实际重量).ToString("0.00"));

            if ((一分厂比例系数 + 二分厂比例系数 + 五分厂比例系数) == 0)
            {
                废打包带基数 = 0;
            }
            else
            {
                废打包带基数 = double.Parse((废打包带 / (一分厂比例系数 + 二分厂比例系数 + 五分厂比例系数)).ToString("0.000"));
            }

            一分厂废打包带实际重量 = double.Parse((废打包带基数 * 一分厂比例系数).ToString("0.000"));
            二分厂废打包带实际重量 = double.Parse((废打包带基数 * 二分厂比例系数).ToString("0.000"));
            五分厂废打包带实际重量 = double.Parse((废打包带基数 * 五分厂比例系数).ToString("0.000"));

            一分厂打包带账面实际重量 = double.Parse((废打包带基数 * 一分厂比例系数).ToString("0.000"));
            二分厂打包带账面实际重量 = double.Parse((废打包带基数 * 二分厂比例系数).ToString("0.000"));
            五分厂打包带账面实际重量 = double.Parse((废打包带基数 * 五分厂比例系数).ToString("0.000"));
            if ((一分厂打包带账面实际重量 + 二分厂打包带账面实际重量 + 五分厂打包带账面实际重量) != 0)
            {
                if ((一分厂打包带账面实际重量 + 二分厂打包带账面实际重量 + 五分厂打包带账面实际重量) - 废打包带 > 0)
                {
                    一分厂打包带账面实际重量 = 一分厂打包带账面实际重量 - ((一分厂打包带账面实际重量 + 二分厂打包带账面实际重量 + 五分厂打包带账面实际重量) - 废打包带);
                }
                if ((一分厂打包带账面实际重量 + 二分厂打包带账面实际重量 + 五分厂打包带账面实际重量) - 废打包带 < 0)
                {
                    一分厂打包带账面实际重量 = 一分厂打包带账面实际重量 - ((一分厂打包带账面实际重量 + 二分厂打包带账面实际重量 + 五分厂打包带账面实际重量) - 废打包带);
                }
            }
            一分厂打包带实际金额 = double.Parse((废打包带实际单价 * 一分厂废打包带实际重量).ToString("0.00"));
            二分厂打包带实际金额 = double.Parse((废打包带实际单价 * 二分厂废打包带实际重量).ToString("0.00"));
            五分厂打包带实际金额 = double.Parse((废打包带实际单价 * 五分厂废打包带实际重量).ToString("0.00"));

            一分厂打包带计划金额 = double.Parse((废打包带计划单价 * 一分厂废打包带实际重量).ToString("0.00"));
            二分厂打包带计划金额 = double.Parse((废打包带计划单价 * 二分厂废打包带实际重量).ToString("0.00"));
            五分厂打包带计划金额 = double.Parse((废打包带计划单价 * 五分厂废打包带实际重量).ToString("0.00"));

            一分厂打包带账面金额 = double.Parse((废打包带计划单价 * 一分厂打包带账面实际重量).ToString("0.00"));
            二分厂打包带账面金额 = double.Parse((废打包带计划单价 * 二分厂打包带账面实际重量).ToString("0.00"));
            五分厂打包带账面金额 = double.Parse((废打包带计划单价 * 五分厂打包带账面实际重量).ToString("0.00"));

            切头实际金额 = double.Parse((废切头实际单价 * 废切头).ToString("0.00"));
            切头计划金额 = double.Parse((废切头计划单价 * 废切头).ToString("0.00"));

            string sql3 = @"if not exists (select * from [废料分配表] where [年度] =@年度 and 月份=@月份)
            begin 
            insert into 废料分配表 values(@年度,@月份,1,1,@一分厂车削实际重量)
            insert into 废料分配表 values(@年度,@月份,1,2,@二分厂车削实际重量)
            insert into 废料分配表 values(@年度,@月份,1,3,@三分厂车削实际重量)
            insert into 废料分配表 values(@年度,@月份,1,5,@五分厂车削实际重量)
            
            insert into 废料分配表 values(@年度,@月份,2,1,@一分厂打包带实际重量)
            insert into 废料分配表 values(@年度,@月份,2,2,@二分厂打包带实际重量)         
            insert into 废料分配表 values(@年度,@月份,2,5,@五分厂打包带实际重量)

            insert into 废料分配表 values(@年度,@月份,3,3,@三分厂切头实际重量)
         

            end
            else
            begin
            update 废料分配表 set 数量=@一分厂车削实际重量 where 年度=@年度 and 月份=@月份 and 废料ID=1 and 分厂ID=1
            update 废料分配表 set 数量=@二分厂车削实际重量 where 年度=@年度 and 月份=@月份 and 废料ID=1 and 分厂ID=2
            update 废料分配表 set 数量=@三分厂车削实际重量 where 年度=@年度 and 月份=@月份 and 废料ID=1 and 分厂ID=3
            update 废料分配表 set 数量=@五分厂车削实际重量 where 年度=@年度 and 月份=@月份 and 废料ID=1 and 分厂ID=5

            update 废料分配表 set 数量=@一分厂打包带实际重量 where 年度=@年度 and 月份=@月份 and 废料ID=2 and 分厂ID=1
            update 废料分配表 set 数量=@二分厂打包带实际重量 where 年度=@年度 and 月份=@月份 and 废料ID=2 and 分厂ID=2
            update 废料分配表 set 数量=@五分厂打包带实际重量 where 年度=@年度 and 月份=@月份 and 废料ID=2 and 分厂ID=5

            update 废料分配表 set 数量=@三分厂切头实际重量 where 年度=@年度 and 月份=@月份 and 废料ID=3 and 分厂ID=3
            
            end";

            sql3 = sql3.Replace("@年度", this.NianDu.Text);
            sql3 = sql3.Replace("@月份", this.YueFen.Text);
            sql3 = sql3.Replace("@一分厂车削实际重量", 一分厂车削账面实际重量.ToString());
            sql3 = sql3.Replace("@二分厂车削实际重量", 二分厂车削账面实际重量.ToString());
            sql3 = sql3.Replace("@三分厂车削实际重量", 三分厂车削账面实际重量.ToString());
            sql3 = sql3.Replace("@五分厂车削实际重量", 五分厂车削账面实际重量.ToString());
            sql3 = sql3.Replace("@一分厂打包带实际重量", 一分厂打包带账面实际重量.ToString());
            sql3 = sql3.Replace("@二分厂打包带实际重量", 二分厂打包带账面实际重量.ToString());
            sql3 = sql3.Replace("@五分厂打包带实际重量", 五分厂打包带账面实际重量.ToString());
            sql3 = sql3.Replace("@三分厂切头实际重量", 废切头.ToString());
            Cmd.CommandText = sql3;
            Cmd.ExecuteNonQuery();


            Conn.Close();
            Reader.Dispose();
            Cmd.Dispose();
            Conn.Dispose();      
        }

        protected void Button_Look_Click(object sender, EventArgs e)
        {
            Button_Query_Click();          
        }
    
    }
}
